package com.huhu.util;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

public class PasswordUtil {
    /**
     * 密码加盐操作 （格式：盐值32 $ 加密之后的密码）
     *
     * @param password 原密码
     * @return
     */
    public static String encrypt(String password) {
        // 生成盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 使用加密算法将盐值和原密码进行加密
        String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 将盐值和加密后的密码一起返回
        String dbPassword = salt + "$" + finalPassword;
        return dbPassword;
    }

    /**
     * 密码解密操作
     * @param inputPassword
     * @param dbPassword
     * @return
     */
    public static boolean decrypt(String inputPassword,String dbPassword){
        // 验证参数
        if (!StringUtils.hasLength(inputPassword)||!StringUtils.hasLength(dbPassword)
                ||dbPassword.length()!=65||!dbPassword.contains("$")){
            return false;
        }
        // 将用户输入的密码和数据库的盐值进行加密，得到待验证密码的加密密码

        // 得到盐值 $ 最终正确的密码
        String[] dbPasswordArray=dbPassword.split("\\$");
        String salt=dbPasswordArray[0];
        String finalPassword=dbPasswordArray[1];

        // 将数据库中的盐值加上用户输入的密码，进行加密 = 待验证的加密密码
        String userPassword=DigestUtils.md5DigestAsHex((salt+inputPassword).getBytes());
        // 将待验证的加密密码和数据库的加密密码进行对比
        if (userPassword.equals(finalPassword)){
            return true;
        }
        // 将结果返回给调用方
        return false;
    }
}
